#!/usr/bin/env python
# -*-coding:UTF-8 -*-
'''
@Project ：19-xpath站长素材.py
@File：47-selenium动作链和iframe.py
@Author ：文非
@Date：2021/3/1617:56
@Require： # selenium动作链和iframe标签
'''
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains  # 动作链的类

# 自动化浏览器打开-实例化一个浏览器对象
browser = webdriver.Chrome(executable_path="./chromedriver.exe")

# 浏览器调用get方法自动发送请求
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
# 如果定位的标签是存在在iframe标签中的则必须通过如下的操作进行标签定位 不能直接使用标签定位的findxxx方法
# 切换浏览器标签的作用域 不切换就做用于该页面的左边的代码框，而切换后作用于右边的运行结果框
browser.switch_to.frame("iframeResult")  # 被定位的iframe标签的id属性就可以了
div = browser.find_element_by_id("draggable")
# print(div)

# 如何模拟拖拽：点击 放到方框内 松开 ----动作链
action = ActionChains(browser)
# 点击长按指定的标签 div
action.click_and_hold(div)
# 平移多少像素 按人的动作循环平移
for i in range(5):
    # Move_by_offset x水平方向，y竖直方向
    action.move_by_offset(17,0).perform()  # perfrom()表示立即执行动作链操作
    sleep(0.5)

action.release()

browser.quit()
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

#如果定位的标签是存在于iframe标签之中的则必须通过如下操作在进行标签定位
bro.switch_to.frame('iframeResult')#切换浏览器标签定位的作用域
div = bro.find_element_by_id('draggable')

#动作链
action = ActionChains(bro)
#点击长按指定的标签
action.click_and_hold(div)

for i in range(5):
    #perform()立即执行动作链操作
    #move_by_offset(x,y):x水平方向 y竖直方向
    action.move_by_offset(17,0).perform()
    sleep(0.5)

#释放动作链
action.release()

bro.quit()